package auth

import (
	"fmt"
	"project/config"
	"project/utils/jwtutil"
	"project/utils/logs"

	"github.com/gin-gonic/gin"
)

type UserInfo struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

// 登录的逻辑
func Login(r *gin.Context) {
	// 1、获取前端传递的用户名和密码
	userInfo := UserInfo{}
	returnData := config.NewReturnData()
	if err := r.ShouldBindJSON(&userInfo); err != nil {
		returnData.Status = 401
		returnData.Message = err.Error()
		r.JSON(200, returnData)
		// r.JSON(200, gin.H{
		// 	"message": err.Error(),
		// 	"status":  401,
		// })
		return
	}
	logs.Info(map[string]interface{}{"用户名": userInfo.Username, "md5user": config.Username, "密码": userInfo.Password}, "开始验证登陆信息")

	// 验证用户名和密码是否正确
	if userInfo.Username == config.Username && userInfo.Password == config.Password {
		// 认证成功，生成JWT的token
		ss, err := jwtutil.GenToken(userInfo.Username)
		if err != nil {
			logs.Error(map[string]interface{}{"用户名": userInfo.Username, "错误信息": err.Error()}, "用户名密码正确，但生成token失败")
			r.JSON(200, gin.H{
				"status":  401,
				"message": "生成token失败",
			})
		}
		// token正常生成，返回给前端
		logs.Info(map[string]interface{}{"用户名": userInfo.Username}, "登录成功")
		// data := make(map[string]interface{})
		// data["token"] = ss
		// 通过returnData简化
		returnData.Message = "登录成功"
		returnData.Data["token"] = ss
		r.JSON(200, returnData)
		return
	} else {
		// 用户名密码错误
		r.JSON(200, gin.H{
			"status":  401,
			"message": "用户名或密码错误",
		})
	}
}

// 登出的逻辑
func Logout(r *gin.Context) {
	r.JSON(200, gin.H{
		"message": "退出成功",
		"status":  200,
	})
	logs.Info(nil, "用户已退出")
	fmt.Println("打印是否调用了config:", config.Username)
}
